package view.ventanas_principales.panels;

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import model.Instructor;
import model.Persona;
import model.PersonalAdministrativo;
import model.Usuario;
import model.comunication.IInstructor;
import model.comunication.IPersonalAdministrativo;
import model.comunication.IUsuario;

import org.eclipse.wb.swing.FocusTraversalOnArray;

import view.usuarios.EmpleadoModificado;

import com.toedter.calendar.JDateChooser;

@SuppressWarnings("serial")
public class MisDatosPanel extends JPanel {

	private JTextField textUser;
	private JTextField textPassword;
	private IUsuario cmmUsuario;
	private JTextField textId;
	private JCheckBox chckbxEditar;
	private IInstructor cmmInstructor;
	private IPersonalAdministrativo cmmPersonalAdministrativo;
	private JTextField textNombre;
	private JTextField textApellido;
	private JTextField textDireccion;
	private JTextField textTelefono;
	private JTextField textCelular;
	private JDateChooser dateFechaNac;
	private JTextField textPermisos;
	private JButton btnGuardarCambios;
	private JTextField textDni;
	private JLabel lblDni;
	private JTextField textIdusuario;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {

					PersonalAdministrativo persona = new PersonalAdministrativo();
					// "Gabriel", "Aguilecho", "gAguilecho@chaja.com", "011-83819273", "11164373922", "1985/07/01", "36348254", tipo.PersonalAdministrativo, "no", 2
					persona.setApellido("Aguilecho");
					persona.setCelular("11164373922");
					persona.setDNI("36348254");
					persona.setEliminado("no");
					persona.setEmail("gAguilecho@chaja.com");
					persona.setIdUsuario(2);
					persona.setNombre("Gabriel");
					persona.setTelefono("011-83819273");

					// 36348254,'Gabriel','Aguilecho','gAguilecho@chaja.com','011-83819273','11164373922','1985/07/01','personal administrativo',default,'2'
					MisDatosPanel window = new MisDatosPanel(persona);
					window.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public MisDatosPanel(Persona persona) {
		cmmPersonalAdministrativo = IPersonalAdministrativo.getInstance();
		cmmInstructor = IInstructor.getInstance();
		cmmUsuario = IUsuario.getInstance();
		initialize();
		getEmpleado(persona);
	}

	public void initialize() {
		setLayout(null);

		JLabel lblNombreUsuario = new JLabel("User Name:");
		lblNombreUsuario.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblNombreUsuario.setBounds(12, 29, 64, 14);
		add(lblNombreUsuario);

		JLabel lblPassword = new JLabel("Password:");
		lblPassword.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblPassword.setBounds(14, 54, 57, 14);
		add(lblPassword);

		JLabel lblPermisos = new JLabel("Permisos:");
		lblPermisos.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblPermisos.setBounds(14, 82, 55, 14);
		add(lblPermisos);

		textUser = new JTextField();
		textUser.setEditable(false);
		textUser.setBounds(92, 26, 138, 20);
		textUser.setColumns(10);
		add(textUser);

		textPassword = new JTextField();
		textPassword.setEditable(false);
		textPassword.setBounds(92, 51, 138, 20);
		textPassword.setColumns(10);
		add(textPassword);

		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblNombre.setBounds(14, 107, 47, 14);
		add(lblNombre);

		JLabel lblApellido = new JLabel("Apellido:");
		lblApellido.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblApellido.setBounds(14, 132, 48, 14);
		add(lblApellido);

		JLabel lblTelefono = new JLabel("Telefono:");
		lblTelefono.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblTelefono.setBounds(14, 190, 52, 14);
		add(lblTelefono);

		lblDni = new JLabel("D.N.I:");
		lblDni.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDni.setBounds(14, 157, 73, 22);
		add(lblDni);

		JLabel lblDireccion = new JLabel("Direccion:");
		lblDireccion.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDireccion.setBounds(14, 240, 55, 14);
		add(lblDireccion);

		JLabel lblFechaDeNacimiento = new JLabel("Fecha de Nacimiento:");
		lblFechaDeNacimiento.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblFechaDeNacimiento.setBounds(14, 271, 119, 14);
		add(lblFechaDeNacimiento);

		JLabel lblCelular = new JLabel("Celular:");
		lblCelular.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblCelular.setBounds(14, 215, 42, 14);
		add(lblCelular);

		textNombre = new JTextField();
		textNombre.setEditable(false);
		textNombre.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		textNombre.setBounds(92, 104, 138, 20);
		textNombre.setColumns(10);
		add(textNombre);

		textApellido = new JTextField();
		textApellido.setEditable(false);
		textApellido.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		textApellido.setColumns(10);
		textApellido.setBounds(92, 129, 138, 20);
		add(textApellido);

		textDireccion = new JTextField();
		textDireccion.setEditable(false);
		textDireccion.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});

		textDni = new JTextField();
		textDni.setEditable(false);
		textDni.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		textDni.setColumns(10);
		textDni.setBounds(92, 157, 138, 22);
		add(textDni);

		textDireccion.setColumns(10);
		textDireccion.setBounds(92, 237, 138, 20);
		add(textDireccion);

		textTelefono = new JTextField();
		textTelefono.setEditable(false);
		textTelefono.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		textTelefono.setColumns(10);
		textTelefono.setBounds(92, 187, 138, 20);
		add(textTelefono);

		textCelular = new JTextField();
		textCelular.setEditable(false);
		textCelular.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		textCelular.setColumns(10);
		textCelular.setBounds(92, 212, 138, 20);
		add(textCelular);

		dateFechaNac = new JDateChooser();
		dateFechaNac.setEnabled(false);
		dateFechaNac.getCalendarButton().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// lblErrorCampoObli.setVisible(false);
			}
		});
		dateFechaNac.setDateFormatString("yyyy/MM/dd");
		dateFechaNac.setBounds(143, 265, 103, 20);
		add(dateFechaNac);

		textPermisos = new JTextField();
		textPermisos.setEditable(false);
		textPermisos.setBounds(92, 79, 138, 20);
		add(textPermisos);
		textPermisos.setColumns(10);

		btnGuardarCambios = new JButton("Guardar Cambios");
		btnGuardarCambios.setEnabled(false);
		btnGuardarCambios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int id = Integer.parseInt(textIdusuario.getText());// chantada
				Usuario usuario = cmmUsuario.getUsuario(id);

				usuario.setName(textUser.getText());
				usuario.setPassword(textPassword.getText());

				cmmUsuario.updateUsuario(usuario);

				if (usuario.getPermisos().equals("Personal Admin") || usuario.getPermisos().equals("Supervisor")) {
					PersonalAdministrativo personal = cmmPersonalAdministrativo.find(id);

					cargarEmpleado(personal);

					cmmPersonalAdministrativo.updatePersonalAdministrativo(personal);

				}

				else if (usuario.getPermisos().equals("Instructor")) {
					Instructor instructor = cmmInstructor.findInstructor(id);

					cargarEmpleado(instructor);

					cmmInstructor.updateInstructor(instructor);
				}
				EmpleadoModificado empModif = new EmpleadoModificado(usuario.getName());
			}
		});
		btnGuardarCambios.setBounds(91, 341, 139, 23);
		add(btnGuardarCambios);

		chckbxEditar = new JCheckBox("editar");
		chckbxEditar.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (chckbxEditar.isSelected() == true) {
					textUser.setEditable(true);
					textPassword.setEditable(true);
					textNombre.setEditable(true);
					textApellido.setEditable(true);
					// textDni.setEditable(true);
					textDireccion.setEditable(true);
					textTelefono.setEditable(true);
					textCelular.setEditable(true);
					dateFechaNac.setEnabled(true);
					btnGuardarCambios.setEnabled(true);
				} else {
					textUser.setEditable(false);
					textPassword.setEditable(false);
					textNombre.setEditable(false);
					textApellido.setEditable(false);
					// textDni.setEditable(false);
					textDireccion.setEditable(false);
					textTelefono.setEditable(false);
					textCelular.setEditable(false);
					dateFechaNac.setEnabled(false);
					btnGuardarCambios.setEnabled(false);
				}
			}
		});
		chckbxEditar.setBounds(90, 306, 97, 23);
		add(chckbxEditar);

		textIdusuario = new JTextField();
		textIdusuario.setVisible(false);
		textIdusuario.setBounds(12, 303, 86, 20);
		add(textIdusuario);
		textIdusuario.setColumns(10);
		setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] { lblNombreUsuario, lblPassword, lblPermisos, textUser, textPassword, lblNombre, lblApellido, lblTelefono, lblDni,
				lblDireccion, lblFechaDeNacimiento, lblCelular, textNombre, textApellido, textDni, textDireccion, textTelefono, textCelular, dateFechaNac, dateFechaNac.getCalendarButton(),
				textPermisos, btnGuardarCambios, chckbxEditar }));

	}

	private void getEmpleado(Persona persona) {
		String dni = persona.getDNI();

		Instructor i = cmmInstructor.getInstructor(dni);
		PersonalAdministrativo p = cmmPersonalAdministrativo.getPersonalAdministrativo(dni);
		if (i.getDNI() != null) {
			// i=cmmInstructor.getInstructor(dni);
			Usuario u = cmmUsuario.getUsuario(i.getIdUsuario());

			textApellido.setText(i.getApellido());
			textCelular.setText(i.getCelular());
			textDireccion.setText(i.getEmail());
			textDni.setText(i.getDNI());
			textNombre.setText(i.getNombre());
			textTelefono.setText(i.getTelefono());
			textPassword.setText(u.getPassword());
			textPermisos.setText(u.getPermisos());
			textUser.setText(u.getName());
			textIdusuario.setText(u.getId().toString());
			dateFechaNac.setCalendar(i.getNacimiento());

		} else if (p.getDNI() != null) {
			// p = cmmPersonalAdministrativo.getPersonalAdministrativo(dni);
			Usuario u = cmmUsuario.getUsuario(p.getIdUsuario());

			textApellido.setText(p.getApellido());
			textCelular.setText(p.getCelular());
			textDireccion.setText(p.getEmail());
			textDni.setText(p.getDNI());
			textNombre.setText(p.getNombre());
			textTelefono.setText(p.getTelefono());
			textPassword.setText(u.getPassword());
			textPermisos.setText(u.getPermisos());
			textUser.setText(u.getName());
			textIdusuario.setText(u.getId().toString());
			dateFechaNac.setCalendar(p.getNacimiento());

		}
	}

	// Para cuando cargue la modidicacion
	private void cargarEmpleado(Persona p) {

		p.setNombre(textNombre.getText());
		p.setApellido(textApellido.getText());
		p.setDNI(textDni.getText());
		p.setEmail(textDireccion.getText());
		p.setTelefono(textTelefono.getText());
		p.setCelular(textCelular.getText());
		p.setNacimiento(dateFechaNac.getCalendar());

	}
}
